Java. Deklaracje i prawa dost pu. Piotr Fulma«ski. December 4, Wydziaˆ Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Podobne dokumenty
Interfejsy, klasy wewn trzne jako szczególny rodzaj obiektów

Imi i nazwisko... Egzamin - Programowanie Obiektowe II rok informatyki, studia pierwszego stopnia, niestacjonarne Termin zerowy

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Programowanie obiektowe

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Java Język programowania

Wykład 7: Pakiety i Interfejsy

Kurs WWW. Paweł Rajba.

Programowanie obiektowe w C++ Wykªad 4

Pakiety i interfejsy. Tomasz Borzyszkowski

Programowanie w Internecie. Java

Wzorce projektowe strukturalne cz. 1

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie obiektowe

KLASY, INTERFEJSY, ITP

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Podstawy modelowania w j zyku UML

Programowanie obiektowe

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

2. Składnia, środowisko i konwencje w Javie

1. Wprowadzenie do C/C++

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Enkapsulacja, dziedziczenie, polimorfizm

Klasy abstrakcyjne, interfejsy i polimorfizm

1. Wprowadzenie do C/C++

Model obiektu w JavaScript

Platformy Programistyczne Podstawy języka Java

1 Atrybuty i metody klasowe

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie obiektowe

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Polimorfizm. dr Jarosław Skaruz

Dokumentacja do API Javy.

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Technologie i usługi internetowe cz. 2

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe

Dziedziczenie. Tomasz Borzyszkowski

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Aplikacje w środowisku Java

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Programowanie obiektowe

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie Komputerów

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Programowanie obiektowe

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Kompozycja i dziedziczenie klas

Platformy Programistyczne Wykład z Javy dla zaawansowanych

Aplikacje w środowisku Java

Programowanie i projektowanie obiektowe

Podstawowe części projektu w Javie

Podstawy Języka Java

19. Obiektowo± 1 Kacze typowanie. 2 Klasy

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

1. Klasa typu sealed. Przykład 1. sealed class Standard{ class NowyStandard:Standard{ // błd!!!

Programowanie obiektowe

Klasy i obiekty cz II

PHP 5 język obiektowy

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Programowanie obiektowe

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie w środowiskach graficznych. Wykład 3 Język C#

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wprowadzenie do języka Java

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

Języki i metodyka programowania. Język C# pętle, sterowanie, wyjątki

Definicje klas i obiektów. Tomasz Borzyszkowski

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Tworzenie aplikacji w języku Java

Dziedziczenie. dr Jarosław Skaruz

Programowanie obiektowe

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Związek między pojęciami Zasada podstawialności Podklasy muszą realizować kontrakt zawarty przez nadklasy

Klasy abstrakcyjne i interfejsy

Podstawy i języki programowania

Logika dla matematyków i informatyków Wykªad 1

Języki i metody programowania Java. Wykład 2 (część 2)

Wykład 2: Podstawy Języka

Programowanie obiektowe - 1.

Java: interfejsy i klasy wewnętrzne

Przypomnienie o klasach i obiektach

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

Programowanie 2. Język C++. Wykład 2.

Przykład -

Transkrypt:

Java Deklaracje i prawa dost pu Piotr Fulma«ski Wydziaˆ Matematyki i Informatyki, Uniwersytet Šódzki, Polska December 4, 2010

Spis tre±ci 1 Java krótka charakterystyka 2 Deklaracje Nazwy Deklarowanie klas Deklarowanie interfejsów Deklarowanie skªadowych klasy Modykatory dost pu Inne modykatory Konstruktor Zmienne Typ wyliczeniowy (enum)

Java krótka charakterystyka Mo»na powiedzie, i» ka»dy program napisany w Javie jest zbiorem pewnych obiektów (ang. objects). Komunikacja mi dzy obiektami zazwyczaj odbywa si za po±rednictwem metod (ang. methods). To czym jest obiekt (jakiego jest rodzaju, typu, co potra) deniowane jest przez klas (ang. class) lub interfejs (ang. interface). Mówi c troch bardziej precyzyjnie

Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie

Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie

Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie

Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie

Java krótka charakterystyka Obiekt, klasa,... Klasa Jest to pewnego rodzaju wzorzec opisuj cy (deniuj cy) stany jakie mo»e przyj ka»dy obiekt utworzony w oparciu o dan klas a tak»e zachowania (czynno±ci, akcje) jakie s dla niego charakterystyczne (czynno±ci jakie mo»e wykona, akcj jakie mo»na zleci jemu do wykonania). Obiekt Stan Zachowanie

Dziedziczenie Java krótka charakterystyka

Pakiet jako zbiór klas Java krótka charakterystyka

Java krótka charakterystyka Nazwy i sªowa kluczowe Zwykle zagadnienie nazewnictwa stosowanego w Javie bywa marginalizowane przecie» to tylko nazwy. Z nazwami jest jednak tak jak z wymow przyjemniej rozmawia si nam z kim± o dobrej dykcji ni» osob mamrocz c co± niewyra¹nie pod nosem. Dodatkowo niewyra¹na wymowa bywa cz sto ¹ródªem pomyªek i przyczyn braku wzajemnego zrozumienia. Tak samo dzieje si te» w programowaniu. Dlatego postanowili±my po±wi ci nazwom osobny podrozdziaª w dalszej cz ±ci podr cznika (patrz

Nazwy Nazwy Mówi c o nazwach, pam ta musimy,»e podlegaj one (jednocze±nie) trzem konwencjom nazewniczym.

Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Bez wzgl du na to jak nazw (identykator)sobie wymy±limy, czy stosujemy si do wªasnej konwencji czy narzuconej np. przez rm, w której pracujemy, musi ona by poprawna skªadniowo, czyli by zbudowana zgodnie z zasadami wedªug jakich kompilator b dzie j w przyszªo±ci sprawdzaª.

Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe

Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe

Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe

Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe

Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe

Nazwy Identykatory poprawne skªadniowo Identykatory poprawne skªadniowo Dopuszczalne znaki Istotna wielko± liter Pierwszy znak Dªugo± identykatora Sªowa kluczowe

Nazwy Identykatory poprawne skªadniowo Sªowa kluczowe tabela

Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Java Code Convention, September 12, 1997 http://www.oracle.com/technetwork/java/codeconv-138413.html

Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe

Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe

Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe

Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe

Nazwy Konwencja nazewnicza rmy Sun Konwencja nazewnicza rmy Sun Klasy i interfejsy Metody Zmienne Staªe

Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza JavaBean Co to jest JavaBean?

Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza wªasno±ci (ang. property) JavaBean Gettery Settery

Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza wªasno±ci (ang. property) JavaBean Gettery Settery

Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza wªasno±ci (ang. property) JavaBean Gettery Settery

Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza (ang. listener) JavaBean rejestrowanie listenera (add) wyrejestrowanie listenera (remove) wspólne: ko«cówka to Listener

Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza (ang. listener) JavaBean rejestrowanie listenera (add) wyrejestrowanie listenera (remove) wspólne: ko«cówka to Listener

Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza (ang. listener) JavaBean rejestrowanie listenera (add) wyrejestrowanie listenera (remove) wspólne: ko«cówka to Listener

Nazwy Konwencja nazewnicza JavaBean Konwencja nazewnicza (ang. listener) JavaBean rejestrowanie listenera (add) wyrejestrowanie listenera (remove) wspólne: ko«cówka to Listener

Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.

Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.

Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.

Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.

Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.

Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.

Deklarowanie klas Wiadomo±ci ogólne Wiadomo±ci ogólne Wpªyw komentarzy Tylko jedna klasa publiczna w pliku ¹ródªowym (nie ma limitu na klasy niepubliczne). Class name and le name matching rule (tylko gdy istnieje klasa publiczna). Umiejscowienie sªowa kluczowego package w klasie. Umiejscowienie sªowa kluczowego import w klasie. Globalne dziaªanie package i import w stosunku do klas umieszczonych w tym samym pliku.

Deklarowanie klas Najprostsza deklaracja klasy c l a s s myclass { Modykatory Modykatory dost pu: public, protected, private. Inne modykatory: final, abstract, strictfp

Deklarowanie klas Najprostsza deklaracja klasy c l a s s myclass { Modykatory Modykatory dost pu: public, protected, private. Inne modykatory: final, abstract, strictfp

Deklarowanie klas Najprostsza deklaracja klasy c l a s s myclass { Modykatory Modykatory dost pu: public, protected, private. Inne modykatory: final, abstract, strictfp

Deklarowanie klas Najprostsza deklaracja klasy c l a s s myclass { Modykatory Modykatory dost pu: public, protected, private. Inne modykatory: final, abstract, strictfp

Deklarowanie klas Modykatory dost pu Modykatory dost pu Cho mamy trzy modykatory dost pu (public, protected, private), to w Javie mamy cztery poziomy kontroli (ang. level or access control) czwarty nazywany jest domy±lnym (ang. default access level) lub pakietowym (ang. package access level). W stosunku do klas u»ywamy albo dost pu domy±lnego, albo public.

Deklarowanie klas Modykatory dost pu Co rozumiemy pod poj ciem: dost p do klasy? Powiemy,»e klasa A ma dost p do klasy B je±li klasa A mo»e wykona jedn z nast puj cych czynno±ci Utworzy instancj klasy B. Rozszerzy klas B. U»ywa metod i zmiennych klasy B (zale»nie od ich modykatorów dost pu).

Deklarowanie klas Modykatory dost pu Co rozumiemy pod poj ciem: dost p do klasy? Powiemy,»e klasa A ma dost p do klasy B je±li klasa A mo»e wykona jedn z nast puj cych czynno±ci Utworzy instancj klasy B. Rozszerzy klas B. U»ywa metod i zmiennych klasy B (zale»nie od ich modykatorów dost pu).

Deklarowanie klas Modykatory dost pu Co rozumiemy pod poj ciem: dost p do klasy? Powiemy,»e klasa A ma dost p do klasy B je±li klasa A mo»e wykona jedn z nast puj cych czynno±ci Utworzy instancj klasy B. Rozszerzy klas B. U»ywa metod i zmiennych klasy B (zale»nie od ich modykatorów dost pu).

Deklarowanie klas Modykatory dost pu Co rozumiemy pod poj ciem: dost p do klasy? Powiemy,»e klasa A ma dost p do klasy B je±li klasa A mo»e wykona jedn z nast puj cych czynno±ci Utworzy instancj klasy B. Rozszerzy klas B. U»ywa metod i zmiennych klasy B (zale»nie od ich modykatorów dost pu).

Deklarowanie klas Domy±lny poziom kontroli package p a k i e t 1 ; c l a s s K l a s a { Listing 1: Plik Klasa.java Listing 2: Plik KlasaLepsza.java package p a k i e t 2 ; import p a k i e t 1. K l a s a ; c l a s s K l a s a L e p s z a extends K l a s a { Wynik próby uruchomienia Can't access class pakiet1.klasa. Class or interface must be public, in same package, or an accessible member class. import pakiet1.klasa;

Deklarowanie klas Publiczny poziom kontroli package p a k i e t 1 ; p u b l i c c l a s s K l a s a { Teraz mo»na napisa Listing 3: Plik Klasa.java Listing 4: Plik KlasaLepsza.java package p a k i e t 2 ; import p a k i e t 1. K l a s a ; c l a s s K l a s a L e p s z a extends K l a s a {

final Deklarowanie klas Inne modykatory

abstract Deklarowanie klas Inne modykatory

strictfp Deklarowanie klas Inne modykatory

Deklarowanie interfejsów Czym jest interfejs? Czym jest interfejs? Interfejs jest pewnego rodzaju umow okre±laj c co klasa mo»e robi, bez okre±lania w jaki sposób to robi.

Deklarowanie interfejsów Czym jest interfejs? O interfejsie mo»na my±le jak o 100% abstakcyjnej klasie. W konsekwencji metody interfejsu z denicji s publiczne i abstrakcyjne wi c nie musimy tego pisa : p u b l i c a b s t r a c t void i n t e r f a c e M e t h o d ( ) ; zwykle zapisujemy jako void i n t e r f a c e M e t h o d ( ) ;

Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.

Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.

Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.

Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.

Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.

Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.

Deklarowanie interfejsów Pozostaªe cechy interfejsów Pozostaªe cechy interfejsów Interfejs deklarujemy za pomoc sªowa kluczowego interface. Wszystkie zmienne interfejsu musz by publiczne, statyczne i zadeklarowane jako final inymi sªowy, w interfejsie mo»na tworzy tylko staªe. Konsekwencja tego jest taka jak dla metod: poniewa» zmienna musz by takie, wiec nie trzeba tego pisa. Interfejs nie mo»e posiada modykatora static. Poniewa» metody interfejsu s abstrakcyjne, wi c nie mog by final, strictfp, native. Interfejsc mo»e tylko rozszerza jeden lub wi cej interfejsów. Interfejs nie mo»e implementowa innego interfejsu lub klasy.

Deklarowanie skªadowych klasy Modykatory Modykatory dost pu Podczas gdy klasa mo»e u»ywa tylko dwóch modykatorów dost pu, tj. domy±lnego lub public, skªadowe klasy (czyli metody i zmienne) mog u»ywa wszystkich czterech modykatorów, tj. public, protected, private oraz domy±lny.

Deklarowanie skªadowych klasy Modykatory Modykator public Dost p maj wszyscy, bez wzgl du na pakiet w jakim si znajduj (zakªadaj c,»e modykatory klas na to pozwalaj ).

Deklarowanie skªadowych klasy Modykator public (odwoªania do skªadowych) package book ; import c e r t. ; c l a s s Goo { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { S ludge o = new S ludge ( ) ; o. t e s t I t ( ) ; package c e r t ; p u b l i c c l a s s S ludge { p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " s l u d g e " ) ;

Deklarowanie skªadowych klasy Modykator public (wpªyw na dziedziczenie) package c e r t ; p u b l i c c l a s s Roo { p u b l i c S t r i n g doroothings ( ) { // i m a g i n e t h e fun code t h a t goes h e r e r e t u r n " fun " ; package n o t c e r t ; import c e r t. Roo ; c l a s s Cloo extends Roo { p u b l i c void t e s t C l o o ( ) { System. out. p r i n t l n ( doroothings ( ) ) ; // cdn

Deklarowanie skªadowych klasy Modykator public (wpªyw na dziedziczenie) // cd c l a s s Toon { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { Cloo c = new Cloo ( ) ; System. out. p r i n t l n ( c. doroothings ( ) ) ; //No problem ; method i s p u b l i c

Deklarowanie skªadowych klasy Modykatory Modykator private Skªadowe prywatne s przeciwie«stwem skªadowych publicznych dos p do nich ma tylko klasa, w której zostaªy zadeklarowane.

Deklarowanie skªadowych klasy Modykator private (odwoªania do skªadowych 1/2) package c e r t ; p u b l i c c l a s s Roo { p r i v a t e S t r i n g doroothings ( ) { // i m a g i n e t h e fun code t h a t goes here, // but o n l y t h e Roo c l a s s knows r e t u r n " fun " ; package n o t c e r t ; import c e r t. Roo ; c l a s s UseARoo { p u b l i c void t e s t I t ( ) { Roo r = new Roo ( ) ; // So f a r so good ; // c l a s s Roo i s p u b l i c System. out. p r i n t l n ( r. doroothings ( ) ) ; // C o m p i l e r e r r o r!

Deklarowanie skªadowych klasy Modykator private (odwoªania do skªadowych 2/2) cannot find symbol symbol : method doroothings()

Deklarowanie skªadowych klasy Modykator private (wpªyw na dziedziczenie 1/2) package c e r t ; p u b l i c c l a s s Roo { p r i v a t e S t r i n g doroothings ( ) { // i m a g i n e t h e fun code t h a t goes here, // but no o t h e r c l a s s w i l l know r e t u r n " fun " ; package c e r t ; // Cloo and Roo a r e i n t h e same package c l a s s Cloo extends Roo {// S t i l l OK, s u p e r c l a s s Roo i s p u b l i c p u b l i c void t e s t C l o o ( ) { System. out. p r i n t l n ( doroothings ( ) ) ; // C o m p i l e r e r r o r!

Deklarowanie skªadowych klasy Modykator private (wpªyw na dziedziczenie 2/2) %javac Cloo.java Cloo.java:4: Undefined method: doroothings() System.out.println(doRooThings()); 1 error

Deklarowanie skªadowych klasy Modykatory Modykator protected W przypadku modykatora protected do skªadowej maj dost p wszystkie klasy potomne (nawet te z innych pakietów) oraz klasy z danego pakietu.

Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 1/2) package c e r t i f i c a t i o n ; p u b l i c c l a s s O t h e r C l a s s { void t e s t I t ( ) { // No m o d i f i e r means method has d e f a u l t // a c c e s s System. out. p r i n t l n ( " O t h e r C l a s s " ) ; package s o m e t h i n g E l s e ; import c e r t i f i c a t i o n. O t h e r C l a s s ; c l a s s A c c e s s C l a s s { s t a t i c p u b l i c void main ( S t r i n g [ ] a r g s ) { O t h e r C l a s s o = new O t h e r C l a s s ( ) ; o. t e s t I t ( ) ;

Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 2/2) No method matching testit() found in class certification.otherclass. o.testit();

Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych) package c e r t i f i c a t i o n ; p u b l i c c l a s s Parent { protected i n t x = 9 ; // p r o t e c t e d a c c e s s package o t h e r ; // D i f f e r e n t package import c e r t i f i c a t i o n. Parent ; c l a s s C h i l d extends Parent { p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " x i s " + x ) ; // No problem ; C h i l d // i n h e r i t s x

Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 1/2) package c e r t i f i c a t i o n ; p u b l i c c l a s s Parent { protected i n t x = 9 ; // p r o t e c t e d a c c e s s package o t h e r ; import c e r t i f i c a t i o n. Parent ; c l a s s C h i l d extends Parent { p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " x i s " + x ) ; // No problem ; // C h i l d i n h e r i t s x Parent p = new Parent ( ) ; // Can we a c c e s s x u s i n g t h e // p r e f e r e n c e? System. out. p r i n t l n ( "X i n p a r e n t i s " + p. x ) ; // C o m p i l e r e r r o r!

Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 2/2) %javac -d. other/child.java other/child.java:9: x has protected access in certification.parent System.out.println("X in parent is " + p.x); ^ 1 error

Deklarowanie skªadowych klasy Modykatory Modykator domy±lny W przypadku domy±lnego poziomu dost pu do skªadowej maj dost p klasy z tego samego pakietu.

Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 1/2) package c e r t i f i c a t i o n ; p u b l i c c l a s s O t h e r C l a s s { void t e s t I t ( ) { // No m o d i f i e r means method has d e f a u l t // a c c e s s System. out. p r i n t l n ( " O t h e r C l a s s " ) ; package o t h e r ; // D i f f e r e n t package import c e r t i f i c a t i o n. Parent ; c l a s s C h i l d extends Parent { p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " x i s " + x ) ;

Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych 2/2) Child.java:4: Undefined variable: x System.out.println("Variable x is " + x); 1 error

Deklarowanie skªadowych klasy Modykator protected (odwoªania do skªadowych) package c e r t i f i c a t i o n ; p u b l i c c l a s s Parent { i n t x = 9 ; // d e f a u l t a c c e s s package c e r t i f i c a t i o n ; c l a s s C h i l d extends Parent { s t a t i c p u b l i c void main ( S t r i n g [ ] a r g s ) { C h i l d s c = new C h i l d ( ) ; s c. t e s t I t ( ) ; p u b l i c void t e s t I t ( ) { System. out. p r i n t l n ( " V a r i a b l e x i s " + x ) ; problem ; // No

Deklarowanie zmiennych lokalnych Modykator protected (odwoªania do skªadowych) Poni»szy zapis nie jest poprawny c l a s s Foo { void d o S t u f f ( ) { p r i v a t e i n t x = 7 ; t h i s. domore ( x ) ; Jedyny modykator jaki mo»na zastosowa do zmiennych lokalnych to final.

Deklarowanie skªadowych klasy Modykatory Modykatory dost pu podsumowanie Widoczno± public protected private domy±lny Ta sama klasa Inna klasa z tego samego pakietu Podklasa z tego samego pakietu Podklasa z innego pakietu Klasa z innego pakietu

Deklarowanie skªadowych klasy Inne modykatory Inne modykatory dost pu final, abstract, synchronized, native, strictfp

Deklarowanie skªadowych klasy Modykatory Modykator final Zabezpiecza metod przed jej przesªoni ciem w klasie potomnej (ang. override)

Deklarowanie skªadowych klasy Modykator final (w przypadku metody) c l a s s S u p e r C l a s s { p u b l i c f i n a l void showsample ( ) { System. out. p r i n t l n ( "One t h i n g. " ) ; c l a s s S u b C l a s s extends S u p e r C l a s s { p u b l i c void showsample ( ) { // Try to o v e r r i d e t h e f i n a l // s u p e r c l a s s method System. out. p r i n t l n ( " Another t h i n g. " ) ;

Deklarowanie skªadowych klasy Modykator final (w przypadku metody) %javac FinalTest.java FinalTest.java:5: The method void showsample() declared in class SubClass cannot override the final method of the same signature declared in class SuperClass. Final methods cannot be overridden. public void showsample() { 1 error

Deklarowanie skªadowych klasy Modykator final (w przypadku argumentu) p u b l i c Record g e t R e c o r d ( i n t f i l e N u m b e r, i n t recnumber ) { p u b l i c Record g e t R e c o r d ( i n t f i l e N u m b e r, f i n a l i n t recordnumber ) {

Deklarowanie skªadowych klasy Modykatory Modykator abstract Metoda abstrakcyjna to metoda, która zostaªa zadeklarowana, ale nie zostaªa zaimplementowana.

Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) p u b l i c c l a s s I l l e g a l C l a s s { // i l l e g a l i f c l a s s i s not a b s t r a c t p u b l i c a b s t r a c t void d o I t ( ) ; IllegalClass.java:1: class IllegalClass must be declared abstract. It does not define void doit() from class IllegalClass. public class IllegalClass{ 1 error

Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) O ile nie mo»e by niebastrakcyjnej klasy z metodami abstrakcyjymi to mo»e by abstrakcyjna klasa z (tylko) metodami nieabstrakcyjnymi. p u b l i c a b s t r a c t c l a s s L e g a l C l a s s { void goodmethod ( ) { // l o t s o f r e a l i m p l e m e n t a t i o n code h e r e

Modykator abstract (w przypadku metody) Pytanie: ile metod jest w klasie Mini Deklarowanie skªadowych klasy p u b l i c a b s t r a c t c l a s s V e h i c l e { p r i v a t e S t r i n g t y p e ; p u b l i c a b s t r a c t void g o U p H i l l ( ) ; // A b s t r a c t method p u b l i c S t r i n g gettype ( ) { // Non a b s t r a c t method r e t u r n t y p e ; p u b l i c a b s t r a c t c l a s s Car extends V e h i c l e { p u b l i c a b s t r a c t void g o U p H i l l ( ) ; // S t i l l a b s t r a c t p u b l i c void docarthings ( ) { // s p e c i a l c a r code goes h e r e p u b l i c c l a s s Mini extends Car { p u b l i c void g o U p H i l l ( ) { // Mini s p e c i f i c g o i n g u p h i l l code

Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) Pytanie: czy ten kod si skompiluje? p u b l i c a b s t r a c t c l a s s A { a b s t r a c t void f o o ( ) ; c l a s s B extends A { void f o o ( i n t I ) { To jest przykªad na przeªadowanie (przeci»enie) (ang. overload). Klasa B nie zawiera w sobie implementacji metody foo.

Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) Pytanie: czy ten kod si skompiluje? p u b l i c a b s t r a c t c l a s s A { a b s t r a c t void f o o ( ) ; c l a s s B extends A { void f o o ( i n t I ) { To jest przykªad na przeªadowanie (przeci»enie) (ang. overload). Klasa B nie zawiera w sobie implementacji metody foo.

Deklarowanie skªadowych klasy Modykator abstract (w przypadku metody) abstract + static = illegal a b s t r a c t s t a t i c void d o S t u f f ( ) ; MyClass.java:2: illegal combination of modifiers: abstract and static abstract static void dostuff();

Deklarowanie skªadowych klasy Modykator synchronized synchronized oznacza,»e metoda nie mo»e by wywoªana przez wi cej ni» jeden w tek w tym samym czasie. p u b l i c synchronized Record r e t r i e v e U s e r I n f o ( i n t i d ) { Modykator ten dotyczy tylko metod (nie zmiennych, nie klas).

Deklarowanie skªadowych klasy Modykatory Modykator native, strictfp Modykator native oznacza,»e metoda (i tylko metoda) zaimplementowana zostaªa w sposób zale»ny platformowo, np. w j zyku C. Ciaªo takiej metody zast pujemy znakiem ±rednika (podobnie jak ciaªo metody abstrakcyjnej).

Deklarowanie skªadowych klasy Deklarowanie metod ze zmienn list argumentów L e g a l : void d o S t u f f ( i n t... x ) { // e x p e c t s from 0 to many i n t s // as p a r a m e t e r s void d o S t u f f 2 ( char c, i n t... x ) { // e x p e c t s f i r s t a char, // then 0 to many i n t s void d o S t u f f 3 ( Animal... a n i m a l ) { // 0 to many Animals I l l e g a l : void d o S t u f f 4 ( i n t x... ) { // bad s y n t a x void d o S t u f f 5 ( i n t... x, char... y ) { // too many var a r g s void d o S t u f f 6 ( S t r i n g... s, byte b ) { // var a r g must be l a s t

Deklarowanie skªadowych klasy Konstruktor c l a s s Foo { protected Foo ( ) { // t h i s i s Foo ' s c o n s t r u c t o r protected void Foo ( ) { // t h i s i s a b a d l y named, // but l e g a l, method Konstruktor Konstruktor nie mo»e by poprzedzony modykatorem static, final ani abstract.

Deklarowanie skªadowych klasy Konstruktor c l a s s Foo { protected Foo ( ) { // t h i s i s Foo ' s c o n s t r u c t o r protected void Foo ( ) { // t h i s i s a b a d l y named, // but l e g a l, method Konstruktor Konstruktor nie mo»e by poprzedzony modykatorem static, final ani abstract.

Deklarowanie skªadowych klasy Konstruktor c l a s s Foo2 { // l e g a l c o n s t r u c t o r s Foo2 ( ) { p r i v a t e Foo2 ( byte b ) { Foo2 ( i n t x ) { Foo2 ( i n t x, i n t... y ) {

Deklarowanie skªadowych klasy Konstruktor c l a s s Foo2 { // i l l e g a l c o n s t r u c t o r s void Foo2 ( ) { // i t ' s a method, not a c o n s t r u c t o r Foo ( ) { // not a method o r a c o n s t r u c t o r Foo2 ( short s ) ; // l o o k s l i k e an a b s t r a c t method s t a t i c Foo2 ( f l o a t f ) { // can ' t be s t a t i c f i n a l Foo2 ( long x ) { // can ' t be f i n a l a b s t r a c t Foo2 ( char c ) { // can ' t be a b s t r a c t Foo2 ( i n t... x, i n t t ) { // bad var a r g s y n t a x

Deklarowanie skªadowych klasy Zmienne W Javie mamy dwa rodzaje zmiennych Zmienne proste char, boolean, byte, short, int, long, float, double byte b ; boolean m y B o o l e a n P r i m i t i v e ; i n t x, y, z ; Zmienne referencyjne czyli zmienne u»ywane w stosunku do obiektów. Zmienna referencyjna pozwala na uzyskanie dost pu do obiektów typu takiego jak zmienna referencyjna lub b d cych podtypem zaeklarowanego typu. O b ject o ; Dog mynewdogreferencevariable ; S t r i n g s1, s2, s3 ;

Deklarowanie skªadowych klasy Zmienne instancyjne c l a s s Employee { // d e f i n e f i e l d s ( i n s t a n c e v a r i a b l e s ) f o r employee i n s t a n c e s p r i v a t e S t r i n g name ; p r i v a t e S t r i n g t i t l e, p r i v a t e S t r i n g manager ; // o t h e r code goes h e r e i n c l u d i n g a c c e s s methods f o r p r i v a t e // f i e l d s

Deklarowanie skªadowych klasy Zmienne lokalne c l a s s T e s t S e r v e r { p u b l i c void l o g I n ( ) { i n t count = 1 0 ;

Deklarowanie skªadowych klasy Zmienne lokalne c l a s s T e s t S e r v e r { p u b l i c void l o g I n ( ) { i n t count = 1 0 ; p u b l i c void dosomething ( i n t i ) { count = i ; // Won ' t c o m p i l e! Can ' t a c c e s s count o u t s i d e // method l o g I n ( )

Deklarowanie skªadowych klasy Zmienne instancyjne i lokalne (shadowing) c l a s s T e s t S e r v e r { i n t count = 9 ; // D e c l a r e an i n s t a n c e v a r i a b l e named count p u b l i c void l o g I n ( ) { i n t count = 1 0 ; // D e c l a r e a l o c a l v a r i a b l e named count System. out. p r i n t l n ( " l o c a l v a r i a b l e count i s "+count ) ; p u b l i c void count ( ) { System. out. p r i n t l n ( " i n s t a n c e v a r i a b l e count i s " + count ) ; p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { new T e s t S e r v e r ( ). l o g I n ( ) ; new T e s t S e r v e r ( ). count ( ) ;

Deklarowanie skªadowych klasy Zmienne instancyjne i lokalne (shadwing) i l l e g a l c l a s s Foo { i n t s i z e = 2 7 ; p u b l i c void s e t S i z e ( i n t s i z e ) { s i z e = s i z e ; //??? which s i z e e q u a l s which s i z e??? l e g a l : c l a s s Foo { i n t s i z e = 2 7 ; p u b l i c void s e t S i z e ( i n t s i z e ) { t h i s. s i z e = s i z e ; // t h i s. s i z e means t h e c u r r e n t o b j e c t ' s // i n s t a n c e v a r i a b l e, s i z e. The s i z e // on t h e r i g h t i s t h e p a r a m e t e r

Deklarowanie skªadowych klasy Tablice D e c l a r i n g an Array o f P r i m i t i v e s i n t [ ] key ; // Recommended i n t key [ ] ; // L e g a l but l e s s r e a d a b l e D e c l a r i n g an Array o f O b ject R e f e r e n c e s Thread [ ] t h r e a d s ; // Recommended Thread t h r e a d s [ ] ; // L e g a l but l e s s r e a d a b l e S t r i n g [ ] [ ] [ ] occupantname ; S t r i n g [ ] managername [ ] ; // L e g a l but not recommended

Deklarowanie skªadowych klasy Zmienne Statyczne zmienne i metody Modykator static wykorzysywany jest do utworzenia zmiennych i metod stniej cych niezale»nie od jakichkolwiek obiektów danej klasy.

Deklarowanie skªadowych klasy Typ wyliczeniowy (enum) enum C o f f e e S i z e { BIG, HUGE, OVERWHELMING ; C o f f e e S i z e c s = C o f f e e S i z e. BIG ;

Deklarowanie skªadowych klasy Typ wyliczeniowy (enum) na zewn trz klasy // t h i s cannot be p r i v a t e o r p r o t e c t e d enum C o f f e e S i z e { BIG, HUGE, OVERWHELMING c l a s s C o f f e e { C o f f e e S i z e s i z e ; p u b l i c c l a s s C o f f e e T e s t 1 { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { C o f f e e d r i n k = new C o f f e e ( ) ; d r i n k. s i z e = C o f f e e S i z e. BIG ; // enum o u t s i d e c l a s s

Deklarowanie skªadowych klasy Typ wyliczeniowy (enum) wewn trz klasy c l a s s C o f f e e 2 { enum C o f f e e S i z e {BIG, HUGE, OVERWHELMING C o f f e e S i z e s i z e ; p u b l i c c l a s s C o f f e e T e s t 2 { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { C o f f e e 2 d r i n k = new C o f f e e 2 ( ) ; d r i n k. s i z e = C o f f e e 2. C o f f e e S i z e. BIG ; // e n c l o s i n g c l a s s // name r e q u i r e d

Deklarowanie skªadowych klasy Typ wyliczeniowy (enum) nie mo»e by deklarowany wewn trz metody p u b l i c c l a s s C o f f e e T e s t 1 { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { enum C o f f e e S i z e { BIG, HUGE, OVERWHELMING C o f f e e d r i n k = new C o f f e e ( ) ; d r i n k. s i z e = C o f f e e S i z e. BIG ; Opcjonaln ±rednik // s e m i c o l o n a t t h e end o f t h e enum d e c l a r a t i o n i s o p t i o n a l enum C o f f e e S i z e { BIG, HUGE, OVERWHELMING ;